package com.sf.osms.dep.processor.util;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

import org.apache.commons.lang3.StringUtils;

public class FileUtil {

	/**
	 * 根据路径删除指定的目录或文件，无论存在与否
	 * 
	 * @param sPath
	 *            要删除的目录或文件
	 * @return 删除成功返回 true，否则返回 false。
	 */
	public static boolean deleteFolder(String sPath) {
		boolean flag = false;
		File file = new File(sPath);
		// 判断目录或文件是否存在
		if (!file.exists()) { // 不存在返回 false
			return flag;
		} else {
			// 判断是否为文件
			if (file.isFile()) { // 为文件时调用删除文件方法
				return deleteFile(sPath);
			} else { // 为目录时调用删除目录方法
				return deleteDirectory(sPath);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param sPath
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true，否则返回false
	 */
	public static boolean deleteFile(String sPath) {
		boolean flag = false;
		File file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			try{
				file.delete();
			}catch (Exception e) {
				e.printStackTrace();
			}
			flag = true;
		}
		return flag;
	}

	/**
	 * 删除目录下的文件和目录
	 * 
	 * @param sPath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true，否则返回false
	 */
	public static boolean deleteDirectory(String sPath) {
		// 如果sPath不以文件分隔符结尾，自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在，或者不是一个目录，则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
				if (!flag)
					break;
			} // 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag)
					break;
			}
		}
		
		return flag;
	}

	/**
	 * 字符串写入文件
	 * 
	 * @param fileName
	 * @param path
	 * @param document
	 *//*
	public static void writeFile(String path, Document document) {
		if (null == document) {
			return;
		}
		FileWriter fw = null;
		XMLWriter writer = null;
		try {
			File file = new File(path);
			if (!file.getParentFile().exists()) {
				try{
					file.getParentFile().mkdirs();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
			fw = new FileWriter(file);
			OutputFormat format = OutputFormat.createPrettyPrint();
			*//** 指定XML编码 *//*
			format.setEncoding("UTF-8");
			*//** 将document中的内容写入文件中 *//*
			writer = new XMLWriter(fw, format);
			writer.write(document);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (null != fw) {
					fw.close();
				}
				if (null != writer) {
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	*/
	/**
	 * 文件内容的总行数。
	 * 
	 * @param file
	 * @return 文件内容的总行数
	 */
	public static int getTotalLines(File file) throws IOException {  
        FileReader in = new FileReader(file);  
        LineNumberReader reader = new LineNumberReader(in);  
        int lines = 0;  
        String s = reader.readLine(); 
        while (s != null) {  
            lines++;  
            s = reader.readLine();  
        }  
        reader.close();  
        in.close();  
        return lines;  
    }
	
	/**
	 * 判断文件是包含指定的字符串
	 * 
	 * @param file
	 * @return 文件内容的总行数
	 */
	public static boolean checkIfFileContainStr(File file,String str) throws IOException {  
		boolean result = false;
        FileReader in = new FileReader(file);  
        LineNumberReader reader = new LineNumberReader(in);  
        int lines = 0;  
        String s = reader.readLine(); 
        while (s != null) {  
            lines++;  
            s = reader.readLine();  
            if(s != null && s.indexOf(str)!= -1){
            	result = true;
            	break;
            }
        }  
        reader.close();  
        in.close();  
        return result;  
    }
	
	public static void createDirIfNot(String dir){
		
		if(StringUtils.isEmpty(dir)){
			return;
		}
		File path = new File(dir);
		if(!path.exists()){
			path.mkdirs();
		}
		
	}
	
	public static File createFile(String filePath){
		File file = new File(filePath);
		File parent = file.getParentFile();
		if(!parent.exists()){
			parent.mkdirs();
		}
		
		return file;
	}
	
	/**
	 * 返回客户上传的真正的文件名称
	 * @param fileName
	 * @return
	 */
	public static String getTreeFileName(String fileName){
		if(StringUtils.isEmpty(fileName)){
			return null;
		}
		return fileName.substring(fileName.indexOf("-")+1);
	}
	
	public static void main(String[] args) throws Exception{
		deleteDirectory("E:/第二次");
	}
}
